home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / RTVBE210.ZIP / WDPMI.C < prev   
C/C++ Source or Header  |  1997-01-03  |  17KB  |  668 lines

  1. ;/*************************************************************************
  2. ; *
  3. ; *     File        : WDPMI.C
  4. ; *
  5. ; *     Description : DPMI Functions - Compatible DJGPP v2
  6. ; *
  7. ; *     Portability : PC/WATCOM/PMODE-W/DOS4G
  8. ; *
  9. ; *
  10. ; *     Copyright (C) 1995,1996 RealTech
  11. ; *
  12. ; ************************************************************************/
  13. #include <i86.h>
  14. #include <string.h>
  15. #include "_standar.h"
  16. #include "_wdpmi.h"
  17.  
  18. #define IN(reg)  rmregs.e##reg = in->d.e##reg
  19. #define OUT(reg) out->d.e##reg = rmregs.e##reg
  20.  
  21. #define DPMI_INT        0x31
  22.  
  23. int __tb;
  24. typedef struct {
  25.     long edi;
  26.     long esi;
  27.     long ebp;
  28.     long reserved;
  29.     long ebx;
  30.     long edx;
  31.     long ecx;
  32.     long eax;
  33.     short flags;
  34.     short es,ds,fs,gs,ip,cs,sp,ss;
  35. }_RMREGS;
  36.  
  37.  
  38. void __dpmi_yield(void)
  39. /* INT 0x2F AX=1680 */
  40. {
  41.     union REGS r;
  42.     r.w.ax = 0x1680;
  43.     int386(0x2F,&r,&r);
  44.     return;
  45. }
  46. int __dpmi_allocate_ldt_descriptors(int _count)
  47. /* DPMI 0.9 AX=0000 */
  48. {
  49.     union REGS r;
  50.     r.w.ax = 0;
  51.     r.w.cx = _count;
  52.     int386(DPMI_INT,&r,&r);
  53.     if (r.x.cflag) error("PM allocSelector failed",1);
  54.     return r.w.ax;
  55. }
  56. int __dpmi_free_ldt_descriptor(int _descriptor)
  57. /* DPMI 0.9 AX=0001 */
  58. {
  59.     union REGS r;
  60.     r.w.ax = 1;
  61.     r.w.bx = _descriptor;
  62.     int386(DPMI_INT,&r,&r);
  63.     return r.x.cflag;
  64. }
  65. /* DPMI 0.9 AX=0002 */
  66. int __dpmi_segment_to_descriptor(int _segm)
  67. {
  68.     union REGS r;
  69.     r.w.ax = 0x0002;
  70.     r.w.bx = _segm;
  71.     int386(DPMI_INT,&r,&r);
  72.     return r.x.cflag;
  73. }
  74. int __dpmi_get_selector_increment_value(void)
  75. /* DPMI 0.9 AX=0003 */
  76. {
  77.     union REGS r;
  78.     r.w.ax = 0x0003;
  79.     int386(DPMI_INT,&r,&r);
  80.     return r.x.cflag;
  81. }
  82. int __dpmi_get_segment_base_address(int _selector, unsigned long *_addr)
  83. /* DPMI 0.9 AX=0006 */
  84. {
  85.     union REGS r;
  86.     r.w.ax = 0x0006;
  87.     r.w.bx = _selector;
  88.     int386(DPMI_INT,&r,&r);
  89.     *_addr = ((long)r.w.cx<<16)+r.w.dx;
  90.     return r.x.cflag;
  91. }
  92. int __dpmi_set_segment_base_address(int _selector, unsigned long _address)
  93. /* DPMI 0.9 AX=0007 */
  94. {
  95.     union REGS r;
  96.     r.w.ax = 7;
  97.     r.w.bx = _selector;
  98.     r.w.cx = _address >> 16;
  99.     r.w.dx = _address & 0xFFFF;
  100.     int386(DPMI_INT,&r,&r);
  101.     return r.x.cflag;
  102. }
  103. unsigned long __dpmi_get_segment_limit(int _selector)
  104. /* LSL instruction  */
  105. {
  106.     return 0;
  107. }
  108. int __dpmi_set_segment_limit(int _selector, unsigned long _limit)
  109. /* DPMI 0.9 AX=0008 */
  110. {
  111.     union REGS r;
  112.     r.w.ax = 8;
  113.     r.w.bx = _selector;
  114.     r.w.cx = _limit >> 16;
  115.     r.w.dx = _limit & 0xFFFF;
  116.     int386(DPMI_INT,&r,&r);
  117.     return r.x.cflag;
  118. }
  119. int __dpmi_get_descriptor_access_rights(int _selector)
  120. /* LAR instruction  */
  121. {
  122.  
  123.     return 0;
  124. }
  125. int __dpmi_set_descriptor_access_rights(int _selector, int _rights)
  126. /* DPMI 0.9 AX=0009 */
  127. {
  128.     union REGS r;
  129.     r.w.ax = 0x0009;
  130.     r.w.bx = _selector;
  131.     r.w.cx = _rights;
  132.     int386(DPMI_INT,&r,&r);
  133.     return r.x.cflag;
  134. }
  135. int __dpmi_create_alias_descriptor(int _selector)/* DPMI 0.9 AX=000a */
  136. {
  137.     union REGS r;
  138.     r.w.ax = 0x000a;
  139.     int386(DPMI_INT,&r,&r);
  140.     return r.x.cflag;
  141. }
  142. int __dpmi_get_descriptor(int _selector, void *_buffer)/* DPMI 0.9 AX=000b */
  143. {
  144.     union REGS r;
  145.     r.w.ax = 0x000b;
  146.     int386(DPMI_INT,&r,&r);
  147.     return r.x.cflag;
  148. }
  149. int __dpmi_set_descriptor(int _selector, void *_buffer)/* DPMI 0.9 AX=000c */
  150. {
  151.     union REGS r;
  152.     r.w.ax = 0x000c;
  153.     int386(DPMI_INT,&r,&r);
  154.     return r.x.cflag;
  155. }
  156. int __dpmi_allocate_specific_ldt_descriptor(int _selector)/* DPMI 0.9 AX=000d */
  157. {
  158.     union REGS r;
  159.     r.w.ax = 0x000d;
  160.     int386(DPMI_INT,&r,&r);
  161.     return r.x.cflag;
  162. }
  163. int __dpmi_get_multiple_descriptors(int _count, void *_buffer)/* DPMI 1.0 AX=000e */
  164. {
  165.     union REGS r;
  166.     r.w.ax = 0x000e;
  167.     int386(DPMI_INT,&r,&r);
  168.     return r.x.cflag;
  169. }
  170. int __dpmi_set_multiple_descriptors(int _count, void *_buffer)/* DPMI 1.0 AX=000f */
  171. {
  172.     union REGS r;
  173.     r.w.ax = 0x000f;
  174.     int386(DPMI_INT,&r,&r);
  175.     return r.x.cflag;
  176. }
  177. int __dpmi_allocate_dos_memory(int _paragraphs, int *_ret_selector_or_max)/* DPMI 0.9 AX=0100 */
  178. {
  179.     union REGS r;
  180.     r.w.ax = 0x0100;
  181.     r.w.bx =  (short) ((_paragraphs+0xF)>>4);
  182.     int386(DPMI_INT,&r,&r);
  183.     *_ret_selector_or_max = r.w.dx;
  184.     __tb = r.w.ax;
  185.     return r.x.cflag;
  186. }
  187.  
  188. int __dpmi_free_dos_memory(int _selector)/* DPMI 0.9 AX=0101 */
  189. {
  190.     union REGS r;
  191.     r.w.ax = 0x0101;
  192.     r.w.bx = _selector;
  193.     int386(DPMI_INT,&r,&r);
  194.     return r.x.cflag;
  195. }
  196. int __dpmi_resize_dos_memory(int _selector, int _newpara, int *_ret_max)/* DPMI 0.9 AX=0102 */
  197. {
  198.     union REGS r;
  199.     r.w.ax = 0x0102;
  200.     int386(DPMI_INT,&r,&r);
  201.     return r.x.cflag;
  202. }
  203. int __dpmi_get_real_mode_interrupt_vector(int _vector, __dpmi_raddr *_address)/* DPMI 0.9 AX=0200 */
  204. {
  205.     union REGS r;
  206.     r.w.ax = 0x0200;
  207.     int386(DPMI_INT,&r,&r);
  208.     return r.x.cflag;
  209. }
  210. int __dpmi_set_real_mode_interrupt_vector(int _vector, __dpmi_raddr *_address)/* DPMI 0.9 AX=0201 */
  211. {
  212.     union REGS r;
  213.     r.w.ax = 0x0201;
  214.     int386(DPMI_INT,&r,&r);
  215.     return r.x.cflag;
  216. }
  217. int __dpmi_get_processor_exception_handler_vector(int _vector, __dpmi_paddr *_address)/* DPMI 0.9 AX=0202 */
  218. {
  219.     union REGS r;
  220.     r.w.ax = 0x0202;
  221.     int386(DPMI_INT,&r,&r);
  222.     return r.x.cflag;
  223. }
  224. int __dpmi_set_processor_exception_handler_vector(int _vector, __dpmi_paddr *_address)/* DPMI 0.9 AX=0203 */
  225. {
  226.     union REGS r;
  227.     r.w.ax = 0x0203;
  228.     int386(DPMI_INT,&r,&r);
  229.     return r.x.cflag;
  230. }
  231. int __dpmi_get_protected_mode_interrupt_vector(int _vector, __dpmi_paddr *_address)/* DPMI 0.9 AX=0204 */
  232. {
  233.     union REGS r;
  234.     r.w.ax = 0x0204;
  235.     int386(DPMI_INT,&r,&r);
  236.     return r.x.cflag;
  237. }
  238. int __dpmi_set_protected_mode_interrupt_vector(int _vector, __dpmi_paddr *_address)/* DPMI 0.9 AX=0205 */
  239. {
  240.     union REGS r;
  241.     r.w.ax = 0x0205;
  242.     int386(DPMI_INT,&r,&r);
  243.     return r.x.cflag;
  244. }
  245. int __dpmi_get_extended_exception_handler_vector_pm(int _vector, __dpmi_paddr *_address)/* DPMI 1.0 AX=0210 */
  246. {
  247.     union REGS r;
  248.     r.w.ax = 0x0210;
  249.     int386(DPMI_INT,&r,&r);
  250.     return r.x.cflag;
  251. }
  252. int __dpmi_get_extended_exception_handler_vector_rm(int _vector, __dpmi_paddr *_address)/* DPMI 1.0 AX=0211 */
  253. {
  254.     union REGS r;
  255.     r.w.ax = 0x0211;
  256.     int386(DPMI_INT,&r,&r);
  257.     return r.x.cflag;
  258. }
  259. int __dpmi_set_extended_exception_handler_vector_pm(int _vector, __dpmi_paddr *_address)/* DPMI 1.0 AX=0212 */
  260. {
  261.     union REGS r;
  262.     r.w.ax = 0x0212;
  263.     int386(DPMI_INT,&r,&r);
  264.     return r.x.cflag;
  265. }
  266. int __dpmi_set_extended_exception_handler_vector_rm(int _vector, __dpmi_paddr *_address)/* DPMI 1.0 AX=0213 */
  267. {
  268.     union REGS r;
  269.     r.w.ax = 0x0213;
  270.     int386(DPMI_INT,&r,&r);
  271.     return r.x.cflag;
  272. }
  273. int __dpmi_int(int _vector, __dpmi_regs *in)/* DPMI 0.9 AX=0300 */
  274. {
  275.     __dpmi_regs *out=in;
  276.     _RMREGS rmregs;
  277.     union REGS r;
  278.     struct SREGS sr;
  279.     memset(&rmregs,0,sizeof(rmregs));
  280.     IN(ax);
  281.     IN(bx);
  282.     IN(cx);
  283.     IN(dx);
  284.     IN(si);
  285.     IN(di);
  286.     IN(bp);
  287.     rmregs.es = in->x.es;
  288.     rmregs.cs = in->x.cs;
  289.     rmregs.ds = in->x.ds;
  290.     segread(&sr); sr.es = sr.ds;
  291.     r.w.ax  = 0x300;
  292.     r.h.bl  = _vector;
  293.     r.h.bh  = 0;
  294.     r.w.cx  = 0;
  295.     r.x.edi = (unsigned)&rmregs;
  296.     int386x(0x31,&r,&r,&sr);
  297.     OUT(ax);
  298.     OUT(bx);
  299.     OUT(cx);
  300.     OUT(dx);
  301.     OUT(si);
  302.     OUT(di);
  303.     OUT(bp);
  304.     in->x.es = rmregs.es;
  305.     in->x.cs = rmregs.cs;
  306.     in->x.ds = rmregs.ds;
  307.     out->x.flags = rmregs.flags;
  308.     return out->x.flags;
  309. }
  310. int __dpmi_simulate_real_mode_interrupt(int _vector, __dpmi_regs *_regs) /* like above, but sets ss sp fl *//* DPMI 0.9 AX=0300 */
  311. {
  312.     return  __dpmi_int(_vector,_regs);
  313. }
  314. int __dpmi_simulate_real_mode_procedure_retf(__dpmi_regs *_regs)/* DPMI 0.9 AX=0301 */
  315. {
  316.     union REGS r;
  317.     r.w.ax = 0x0301;
  318.     int386(DPMI_INT,&r,&r);
  319.     return r.x.cflag;
  320. }
  321. int __dpmi_simulate_real_mode_procedure_retf_stack(__dpmi_regs *_regs, int stack_bytes_to_copy, const void *stack_bytes) /* DPMI 0.9 AX=0301 */
  322. {
  323.     union REGS r;
  324.     r.w.ax = 0x0301;
  325.     int386(DPMI_INT,&r,&r);
  326.     return r.x.cflag;
  327. }
  328. int __dpmi_simulate_real_mode_procedure_iret(__dpmi_regs *_regs)/* DPMI 0.9 AX=0302 */
  329. {
  330.     union REGS r;
  331.     r.w.ax = 0x0302;
  332.     int386(DPMI_INT,&r,&r);
  333.     return r.x.cflag;
  334. }
  335. int __dpmi_allocate_real_mode_callback(void (*_handler)(void), __dpmi_regs *_regs, __dpmi_raddr *_ret) /* DPMI 0.9 AX=0303 */
  336. {
  337.     union REGS r;
  338.     r.w.ax = 0x0303;
  339.     int386(DPMI_INT,&r,&r);
  340.     return r.x.cflag;
  341. }
  342. int __dpmi_free_real_mode_callback(__dpmi_raddr *_addr)/* DPMI 0.9 AX=0304 */
  343. {
  344.     union REGS r;
  345.     r.w.ax = 0x0304;
  346.     int386(DPMI_INT,&r,&r);
  347.     return r.x.cflag;
  348. }
  349. int __dpmi_get_state_save_restore_addr(__dpmi_raddr *_rm, __dpmi_paddr *_pm)/* DPMI 0.9 AX=0305 */
  350. {
  351.     union REGS r;
  352.     r.w.ax = 0x0305;
  353.     int386(DPMI_INT,&r,&r);
  354.     return r.x.cflag;
  355. }
  356. int __dpmi_get_raw_mode_switch_addr(__dpmi_raddr *_rm, __dpmi_paddr *_pm)/* DPMI 0.9 AX=0306 */
  357. {
  358.     union REGS r;
  359.     r.w.ax = 0x0306;
  360.     int386(DPMI_INT,&r,&r);
  361.     return r.x.cflag;
  362. }
  363. int __dpmi_get_version(__dpmi_version_ret *_ret)/* DPMI 0.9 AX=0400 */
  364. {
  365.     union REGS r;
  366.     r.w.ax = 0x0400;
  367.     int386(DPMI_INT,&r,&r);
  368.     _ret->minor    =  r.h.al;
  369.     _ret->major    =  r.h.ah;
  370.     _ret->flags    =  r.w.bx;
  371.     _ret->cpu      =  r.h.cl;
  372.     return r.x.cflag;
  373. }
  374.  
  375. int __dpmi_get_capabilities(int *_flags, char *vendor_info)/* DPMI 1.0 AX=0401 */
  376. {
  377.     union REGS r;
  378.     r.w.ax = 0x0401;
  379.     int386(DPMI_INT,&r,&r);
  380.     return r.x.cflag;
  381. }
  382.  
  383. int __dpmi_get_free_memory_information(__dpmi_free_mem_info *_info)/* DPMI 0.9 AX=0500 */
  384. {
  385.     union REGS regs;
  386.     struct SREGS sregs;
  387.     regs.x.eax = 0x0500;
  388.     memset( &sregs, 0, sizeof(sregs) );
  389.     sregs.es = FP_SEG( _info );
  390.     regs.x.edi = FP_OFF( _info );
  391.     int386x( DPMI_INT, ®s, ®s, &sregs );
  392.  
  393.     return regs.x.cflag;
  394. }
  395. int __dpmi_allocate_memory(__dpmi_meminfo *_info)/* DPMI 0.9 AX=0501 */
  396. {
  397.     union REGS r;
  398.     r.w.ax = 0x0501;
  399.     int386(DPMI_INT,&r,&r);
  400.     return r.x.cflag;
  401. }
  402. int __dpmi_free_memory(unsigned long _handle)/* DPMI 0.9 AX=0502 */
  403. {
  404.     union REGS r;
  405.     r.w.ax = 0x0502;
  406.     int386(DPMI_INT,&r,&r);
  407.     return r.x.cflag;
  408. }
  409. int __dpmi_resize_memory(__dpmi_meminfo *_info)/* DPMI 0.9 AX=0503 */
  410. {
  411.     union REGS r;
  412.     r.w.ax = 0x0503;
  413.     int386(DPMI_INT,&r,&r);
  414.     return r.x.cflag;
  415. }
  416. int __dpmi_allocate_linear_memory(__dpmi_meminfo *_info, int _commit)/* DPMI 1.0 AX=0504 */
  417. {
  418.     union REGS r;
  419.     r.w.ax = 0x0504;
  420.     int386(DPMI_INT,&r,&r);
  421.     return r.x.cflag;
  422. }
  423. int __dpmi_resize_linear_memory(__dpmi_meminfo *_info, int _commit)/* DPMI 1.0 AX=0505 */
  424. {
  425.     union REGS r;
  426.     r.w.ax = 0x0505;
  427.     int386(DPMI_INT,&r,&r);
  428.     return r.x.cflag;
  429. }
  430. int __dpmi_get_page_attributes(__dpmi_meminfo *_info, short *_buffer)/* DPMI 1.0 AX=0506 */
  431. {
  432.     union REGS r;
  433.     r.w.ax = 0x0506;
  434.     int386(DPMI_INT,&r,&r);
  435.     return r.x.cflag;
  436. }
  437. int __dpmi_set_page_attributes(__dpmi_meminfo *_info, short *_buffer)/* DPMI 1.0 AX=0507 */
  438. {
  439.     union REGS r;
  440.     r.w.ax = 0x0507;
  441.     int386(DPMI_INT,&r,&r);
  442.     return r.x.cflag;
  443. }
  444. int __dpmi_map_device_in_memory_block(__dpmi_meminfo *_info, unsigned long _physaddr)/* DPMI 1.0 AX=0508 */
  445. {
  446.     union REGS r;
  447.     r.w.ax = 0x0508;
  448.     int386(DPMI_INT,&r,&r);
  449.     return r.x.cflag;
  450. }
  451. int __dpmi_map_conventional_memory_in_memory_block(__dpmi_meminfo *_info, unsigned long _physaddr) /* DPMI 1.0 AX=0509 */
  452. {
  453.     union REGS r;
  454.     r.w.ax = 0x0509;
  455.     int386(DPMI_INT,&r,&r);
  456.     return r.x.cflag;
  457. }
  458. int __dpmi_get_memory_block_size_and_base(__dpmi_meminfo *_info)/* DPMI 1.0 AX=050a */
  459. {
  460.     union REGS r;
  461.     r.w.ax = 0x050a;
  462.     int386(DPMI_INT,&r,&r);
  463.     return r.x.cflag;
  464. }
  465. int __dpmi_get_memory_information(__dpmi_memory_info *_buffer)/* DPMI 1.0 AX=050b */
  466. {
  467.     union REGS r;
  468.     r.w.ax = 0x050b;
  469.     int386(DPMI_INT,&r,&r);
  470.     return r.x.cflag;
  471. }
  472. int __dpmi_lock_linear_region(__dpmi_meminfo *_info)/* DPMI 0.9 AX=0600 */
  473. {
  474.     union REGS r;
  475.     r.w.ax = 0x0600;
  476.     int386(DPMI_INT,&r,&r);
  477.     return r.x.cflag;
  478. }
  479. int __dpmi_unlock_linear_region(__dpmi_meminfo *_info)/* DPMI 0.9 AX=0601 */
  480. {
  481.     union REGS r;
  482.     r.w.ax = 0x0601;
  483.     int386(DPMI_INT,&r,&r);
  484.     return r.x.cflag;
  485. }
  486. int __dpmi_mark_real_mode_region_as_pageable(__dpmi_meminfo *_info)/* DPMI 0.9 AX=0602 */
  487. {
  488.     union REGS r;
  489.     r.w.ax = 0x0602;
  490.     int386(DPMI_INT,&r,&r);
  491.     return r.x.cflag;
  492. }
  493. int __dpmi_relock_real_mode_region(__dpmi_meminfo *_info)/* DPMI 0.9 AX=0603 */
  494. {
  495.     union REGS r;
  496.     r.w.ax = 0x0603;
  497.     int386(DPMI_INT,&r,&r);
  498.     return r.x.cflag;
  499. }
  500. int __dpmi_get_page_size(unsigned long *_size)/* DPMI 0.9 AX=0604 */
  501. {
  502.     union REGS r;
  503.     r.w.ax = 0x0604;
  504.     int386(DPMI_INT,&r,&r);
  505.     return r.x.cflag;
  506. }
  507. int __dpmi_mark_page_as_demand_paging_candidate(__dpmi_meminfo *_info)/* DPMI 0.9 AX=0702 */
  508. {
  509.     union REGS r;
  510.     r.w.ax = 0x0702;
  511.     int386(DPMI_INT,&r,&r);
  512.     return r.x.cflag;
  513. }
  514. int __dpmi_discard_page_contents(__dpmi_meminfo *_info)/* DPMI 0.9 AX=0703 */
  515. {
  516.     union REGS r;
  517.     r.w.ax = 0x0703;
  518.     int386(DPMI_INT,&r,&r);
  519.     return r.x.cflag;
  520. }
  521.  
  522. int __dpmi_physical_address_mapping(__dpmi_meminfo *_info)/* DPMI 0.9 AX=0800 */
  523. {
  524.     union REGS r;
  525.     r.w.ax = 0x800;
  526.     r.w.bx = (short) (_info->address >> 16);
  527.     r.w.cx = (short) (_info->address & 0xFFFF);
  528.     r.w.si = (short) (_info->size  >>16 );
  529.     r.w.di = (short) (_info->size   & 0xFFFF);
  530.     int386(DPMI_INT,&r,&r);
  531.     _info->handle = ((ulong)r.w.bx << 16) + (ulong)r.w.cx;
  532.     return r.x.cflag;
  533. }
  534. int __dpmi_free_physical_address_mapping(__dpmi_meminfo *_info)/* DPMI 0.9 AX=0801 */
  535. {
  536.     union REGS r;
  537.     r.w.ax = 0x0801;
  538.     int386(DPMI_INT,&r,&r);
  539.     return r.x.cflag;
  540. }
  541. /* These next four functions return the old state */
  542. int __dpmi_get_and_disable_virtual_interrupt_state(void)/* DPMI 0.9 AX=0900 */
  543. {
  544.     union REGS r;
  545.     r.w.ax = 0x0900;
  546.     int386(DPMI_INT,&r,&r);
  547.     return r.x.cflag;
  548. }
  549. int __dpmi_get_and_enable_virtual_interrupt_state(void)/* DPMI 0.9 AX=0901 */
  550. {
  551.     union REGS r;
  552.     r.w.ax = 0x0901;
  553.     int386(DPMI_INT,&r,&r);
  554.     return r.x.cflag;
  555. }
  556. int __dpmi_get_and_set_virtual_interrupt_state(int _old_state)/* DPMI 0.9 AH=09   */
  557. {
  558.     union REGS r;
  559.     r.h.ah = 0x09;
  560.     int386(DPMI_INT,&r,&r);
  561.     return r.x.cflag;
  562. }
  563. int __dpmi_get_virtual_interrupt_state(void)/* DPMI 0.9 AX=0902 */
  564. {
  565.     union REGS r;
  566.     r.w.ax = 0x0902;
  567.     int386(DPMI_INT,&r,&r);
  568.     return r.x.cflag;
  569. }
  570. int __dpmi_get_vendor_specific_api_entry_point(char *_id, __dpmi_paddr *_api)/* DPMI 0.9 AX=0a00 */
  571. {
  572.     union REGS r;
  573.     r.w.ax = 0x0a00;
  574.     int386(DPMI_INT,&r,&r);
  575.     return r.x.cflag;
  576. }
  577. int __dpmi_set_debug_watchpoint(__dpmi_meminfo *_info, int _type)/* DPMI 0.9 AX=0b00 */
  578. {
  579.     union REGS r;
  580.     r.w.ax = 0x0b00;
  581.     int386(DPMI_INT,&r,&r);
  582.     return r.x.cflag;
  583. }
  584. int __dpmi_clear_debug_watchpoint(unsigned long _handle)/* DPMI 0.9 AX=0b01 */
  585. {
  586.     union REGS r;
  587.     r.w.ax = 0x0b01;
  588.     int386(DPMI_INT,&r,&r);
  589.     return r.x.cflag;
  590. }
  591. int __dpmi_get_state_of_debug_watchpoint(unsigned long _handle, int *_status)/* DPMI 0.9 AX=0b02 */
  592. {
  593.     union REGS r;
  594.     r.w.ax = 0x0b02;
  595.     int386(DPMI_INT,&r,&r);
  596.     return r.x.cflag;
  597. }
  598. int __dpmi_reset_debug_watchpoint(unsigned long _handle)/* DPMI 0.9 AX=0b03 */
  599. {
  600.     union REGS r;
  601.     r.w.ax = 0x0b03;
  602.     int386(DPMI_INT,&r,&r);
  603.     return r.x.cflag;
  604. }
  605. int __dpmi_install_resident_service_provider_callback(__dpmi_callback_info *_info)/* DPMI 1.0 AX=0c00 */
  606. {
  607.     union REGS r;
  608.     r.w.ax = 0x0c00;
  609.     int386(DPMI_INT,&r,&r);
  610.     return r.x.cflag;
  611. }
  612. int __dpmi_terminate_and_stay_resident(int return_code, int paragraphs_to_keep)/* DPMI 1.0 AX=0c01 */
  613. {
  614.     union REGS r;
  615.     r.w.ax = 0x0c01;
  616.     int386(DPMI_INT,&r,&r);
  617.     return r.x.cflag;
  618. }
  619. int __dpmi_allocate_shared_memory(__dpmi_shminfo *_info)/* DPMI 1.0 AX=0d00 */
  620. {
  621.     union REGS r;
  622.     r.w.ax = 0x0d00;
  623.     int386(DPMI_INT,&r,&r);
  624.     return r.x.cflag;
  625. }
  626. int __dpmi_free_shared_memory(unsigned long _handle)/* DPMI 1.0 AX=0d01 */
  627. {
  628.     union REGS r;
  629.     r.w.ax = 0x0d01;
  630.     int386(DPMI_INT,&r,&r);
  631.     return r.x.cflag;
  632. }
  633. int __dpmi_serialize_on_shared_memory(unsigned long _handle, int _flags)/* DPMI 1.0 AX=0d02 */
  634. {
  635.     union REGS r;
  636.     r.w.ax = 0x0d02;
  637.     int386(DPMI_INT,&r,&r);
  638.     return r.x.cflag;
  639. }
  640. int __dpmi_free_serialization_on_shared_memory(unsigned long _handle, int _flags)/* DPMI 1.0 AX=0d03 */
  641. {
  642.     union REGS r;
  643.     r.w.ax = 0x0d03;
  644.     int386(DPMI_INT,&r,&r);
  645.     return r.x.cflag;
  646. }
  647. int __dpmi_get_coprocessor_status(void)/* DPMI 1.0 AX=0e00 */
  648. {
  649.     union REGS r;
  650.     r.w.ax = 0x0e00;
  651.     int386(DPMI_INT,&r,&r);
  652.     return r.x.cflag;
  653. }
  654. int __dpmi_set_coprocessor_emulation(int _flags)/* DPMI 1.0 AX=0e01 */
  655. {
  656.     union REGS r;
  657.     r.w.ax = 0x0e01;
  658.     int386(DPMI_INT,&r,&r);
  659.     return r.x.cflag;
  660. }
  661. int __dpmi_get_PMODE_infos(void)/* DPMI 1.0 AX=eeff */
  662. {
  663.     union REGS r;
  664.     r.w.ax = 0xeeff;
  665.     int386(DPMI_INT,&r,&r);
  666.     return r.x.cflag;
  667. }
  668.